Esta función trabaja de una forma muy similar a filter(), con la diferencia que en lugar de aplicar una condición a un elemento de una lista o secuencia, aplica una función sobre todos los elementos y como resultado se devuelve un iterable de tipo map:
In [3]:
def doblar(numero):
return numero*2
numeros = [2, 5, 10, 23, 50, 33]
map(doblar, numeros)
Out[3]:
Fácilmente podemos transformar este iterable en una lista:
In [5]:
list(map(doblar, numeros))
Out[5]:
Y podemos simplificarlo con una función lambda para substituir la llamada de una función definida:
In [6]:
list( map(lambda x: x*2, numeros) )
Out[6]:
La función map() se utiliza mucho junto a expresiones lambda ya que permite ahorrarnos el esfuerzo de crear bucles for.
Además se puede utilizar sobre más de un iterable con la condición que tengan la misma longitud.
Por ejemplo si queremos multiplicar los números de dos listas:
In [8]:
a = [1, 2, 3, 4, 5]
b = [6, 7, 8, 9, 10]
list( map(lambda x,y : x*y, a,b) )
Out[8]:
E incluso podemos extender la funcionalidad a tres listas o más:
In [12]:
c = [11, 12, 13, 14, 15]
list( map(lambda x,y,z : x*y*z, a,b,c) )
Out[12]:
In [35]:
class Persona:
def __init__(self, nombre, edad):
self.nombre = nombre
self.edad = edad
def __str__(self):
return "{} de {} años".format(self.nombre, self.edad)
personas = [
Persona("Juan", 35),
Persona("Marta", 16),
Persona("Manuel", 78),
Persona("Eduardo", 12)
]
Por ejemplo una función para incrementar un año de edad a todas las personas de la lista:
In [36]:
def incrementar(p):
p.edad += 1
return p
personas = map(incrementar, personas)
for persona in personas:
print(persona)
Claro que en este caso tenemos que utilizar una función definida porque no necesitamos actuar sobre la instancia, a no ser que nos tomemos la molestia de rehacer todo el objeto:
In [33]:
personas = [
Persona("Juan", 35),
Persona("Marta", 16),
Persona("Manuel", 78),
Persona("Eduardo", 12)
]
personas = map(lambda p: Persona(p.nombre, p.edad+1), personas)
for persona in personas:
print(persona)
Y con esto acabamos esta interesante funcionalidad.